package com.shm.leetcode;

/**
 * 485. 最大连续1的个数
 * 给定一个二进制数组， 计算其中最大连续1的个数。
 *
 * 示例 1:
 *
 * 输入: [1,1,0,1,1,1]
 * 输出: 3
 * 解释: 开头的两位和最后的三位都是连续1，所以最大连续1的个数是 3.
 * 注意：
 *
 * 输入的数组只包含 0 和1。
 * 输入数组的长度是正整数，且不超过 10,000。
 * @author SHM
 */
public class FindMaxConsecutiveOnes {
    public int findMaxConsecutiveOnes(int[] nums) {
        int left=0,right=0;
        int n = nums.length;
        int count = 0;
        while(left<n&&nums[left]==0){
            left++;
        }
        right=left;
        while(right<n){
            while(right<n&&nums[right]==1){
                right++;
            }
            count = Math.max(count,right-left);
            left=right;
            while(left<n&&nums[left]==0){
                left++;
            }
            right=left;
        }
        return count;
    }

    /**
     * 方法一：一次遍历
     * 为了得到数组中最大连续 11 的个数，需要遍历数组，并记录最大的连续 11 的个数和当前的连续 11 的个数。如果当前元素是 11，则将当前的连续 11 的个数加 11，否则，使用之前的连续 11 的个数更新最大的连续 11 的个数，并将当前的连续 11 的个数清零。
     *
     * 遍历数组结束之后，需要再次使用当前的连续 11 的个数更新最大的连续 11 的个数，因为数组的最后一个元素可能是 11，且最长连续 11 的子数组可能出现在数组的末尾，如果遍历数组结束之后不更新最大的连续 11 的个数，则会导致结果错误。
     *
     * 复杂度分析
     *
     * 时间复杂度：O(n)O(n)，其中 nn 是数组的长度。需要遍历数组一次。
     *
     * 空间复杂度：O(1)O(1)。
     * 作者：LeetCode-Solution
     * 链接：https://leetcode-cn.com/problems/max-consecutive-ones/solution/zui-da-lian-xu-1de-ge-shu-by-leetcode-so-252a/
     * @param nums
     * @return
     */
    public int findMaxConsecutiveOnes_2(int[] nums) {
        int n = nums.length;
        int maxCount = 0,count=0;

        for (int i = 0; i < n; i++) {
            if(nums[i]==1){
                count++;
            }else {
                maxCount = Math.max(count,maxCount);
                count=0;
            }
        }
        maxCount = Math.max(count,maxCount);
        return maxCount;
    }
}
